CodePipelineからCodeBuildの環境変数が設定できるようになりました!
はじめに
こんにちは!AWS事業本部の島川です。
CodePipelineからCodeBuildの環境変数が設定ができるようになりました。
AWS CodePipeline Enables Setting Environment Variables on AWS CodeBuild Build Jobs
You can now set environment variables for CodeBuild build jobs in your pipeline.
これまでは複数環境下の場合、環境ごとにCodeBuildプロジェクトを用意⇒環境変数を設定するということが必要でした。
CodePipelineもその分の数が必要でした。
それが今回のアップデートにより、1つのCodeBuildプロジェクトのみで複数環境に対応できるようになりました。
CodePipelineの追加だけで済むようになります!
やってみた
CodeBuild の Docker サンプル(DockerイメージをECRにプッシュする)を使って、CodePipelineからCodeBuildの環境変数を設定してみます。
GitHubにコードをアップする。
今回はソース元をGitHubを選択しました。
まずは検証で使うDockerfileとbuildspec.ymlをGitHubにアップします。
どちらもrootに配置します。
- Dockerfile
FROM golang:1.12-alpine AS build #Install git RUN apk add --no-cache git #Get the hello world package from a GitHub repository RUN go get github.com/golang/example/hello WORKDIR /go/src/github.com/golang/example/hello # Build the project and send the output to /bin/HelloWorld RUN go build -o /bin/HelloWorld FROM golang:1.12-alpine #Copy the build's output binary from the previous build container COPY --from=build /bin/HelloWorld /bin/HelloWorld ENTRYPOINT ["/bin/HelloWorld"]
- buildspec.yml
version: 0.2 phases: install: runtime-versions: docker: 18 pre_build: commands: - echo Logging in to Amazon ECR... - $(aws ecr get-login --no-include-email --region $AWS_DEFAULT_REGION) build: commands: - echo Build started on `date` - echo Building the Docker image... - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG post_build: commands: - echo Build completed on `date` - echo Pushing the Docker image... - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
CodePipelineの設定をする。
マネジメントコンソールから設定していきます。
パイプラインの作成をクリックします。
[Step1]パイプラインの名前とロール名を入力。
[Step2]ソースステージはGitHubを選択(先ほどコードをアップしたレポジトリを選択します)
[Step3]ビルドステージはもちろんCodeBuildを選択します。
今回はここからCodeBuildも作成します。
CodeBuildの設定内容は画像をご参照ください。
追加されていることを確認します。
お...!環境変数の追加という項目見つけました。今回は一旦CodePipeline作成をしてしまい、あとから設定をいじることにします。
また、CodeBuild作成時にロールも一緒に作成されましたがそのロールに"ecr:CreateRepository"の権限を付与する必要があります。今回はすでに存在するAmazonEC2ContainerRegistryPowerUserのポリシーを付与で対応します。
[Step4]ECRへのプッシュが目的なのでデプロイはスキップします。
設定内容を確認してパイプラインを作成します。
作成後自動的にパイプラインが動きますが、環境変数設定してない&ECRレポジトリが存在していないので失敗します。
ECRレポジトリを作成する。
プッシュ先が必要なのでECRレポジトリを作成します。環境変数でも設定するので覚えておきましょう。
CodePipelineから環境変数を設定する。
作成したCodePipelineのステージを編集します。
展開されたらここをクリックします。
環境変数を追加します。
buildspec.ymlで以下4つの環境変数を定義しているのでそれを埋めて保存します。
名前 | 値 | 入力 |
---|---|---|
AWS_DEFAULT_REGION | ap-northeast-1(リージョン) | プレーンテキスト |
AWS_ACCOUNT_ID | 123456789012(AWSアカウントID) | プレーンテキスト |
IMAGE_TAG | latest(イメージのタグ) | プレーンテキスト |
IMAGE_REPO_NAME | test-ecr(ECRレポジトリ名) | プレーンテキスト |
実行
変更をリリースします。
成功したようなので、ECRでちゃんとアップできているか確認します。
できました!
さいごに
CodePipeline側でCodeBuildの環境変数の設定ができることを確認しました。汎用的なCodeBuildを用意しておけばCodePipelineのみの設定で済むようになり、設定の見通しが良くなったと思います。
既にCodePipelineを運用している場合でも切り替えが容易なので、適用をご検討してみてください!